//===============================================================================
// Microsoft patterns & practices Enterprise Library Contribution
// Resource Application Block
//===============================================================================

using System;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder;
using EntLibContrib.Resource.Managers;

namespace EntLibContrib.Resource
{
	/// <summary>
	/// Interface exposed by any provider that supports resources
	/// </summary>
	/// <remarks>
	/// <para>All Resource Provider classes will be required to implement this Interface</para>
	/// <para>The Resource Provider Factory creates an instance of a resource manager provider and returns the result as an object of type <see cref="System.Resources.ResourceManager"/></para>
	/// </remarks>
	[CustomFactory(typeof(ResourceProviderCustomFactory))]
	public interface IResourceProvider
	{
		#region Properties
		/// <summary>
		/// Gets the current name of the <see cref="System.Resources.ResourceManager"/> using this instance.
		/// </summary>
		/// <value>
		/// The current name of the <see cref="System.Resources.ResourceManager"/> using this instance.
		/// </value>
		string CurrentResourceManager
		{
			get;
			set;
		}
		#endregion

		#region Methods
		/// <summary>
		/// Create a Resource Manager to manage the resources for a given resource provider
		/// </summary>
		/// <returns>A ResourceManager instance</returns>
		/// <remarks>This method makes a type of <see cref="System.Resources.ResourceManager"/> instance publicly available
		/// without the caller needing to know where the resources are provided from</remarks>
		ExtendedComponentResourceManager CreateResourceManager();
		#endregion
	}
}
